var formChecker = null;

function swfUploadLoaded()
{
      var btnSubmit = document.getElementById("btnSubmit");
      
      btnSubmit.onclick = doSubmit;
      btnSubmit.disabled = true;
      
      /*txtLastName.onchange = validateForm;
      txtFirstName.onchange = validateForm;
      txtEducation.onchange = validateForm;
      txtReferences.onchange = validateForm;
      */
      formChecker = window.setInterval(validateForm, 1000);
      
      validateForm();
}

function two(x)
{
      return ((x>9)?"":"0")+x;
}
function three(x)
{
      return ((x>99)?"":"0")+((x>9)?"":"0")+x;
}

function converttime(ms)
{
      var t = "";
      
      var sec = Math.floor(ms/1000)
      ms = ms % 1000
      /*t = three(ms)*/

      var min = Math.floor(sec/60)
      sec = sec % 60
      
      var hr = Math.floor(min/60)
      min = min % 60

      var day = Math.floor(hr/60)
      hr = hr % 60
      
      if (sec > 0)
      {
            if (min < 1 && hr < 1 && day < 1)
            {
                  t = sec
            }
            else
            {
                  t = two(sec)
            }
      }
      
      if (min > 0)
      {
            if (hr < 1 && day < 1)
            {
                  if (sec < 1)
                  {
                        t = min + ":00"
                  }
                  else
                  {
                        t = min + ":" + t
                  }
            }
            else
            {
                  if (sec < 1)
                  {
                        t = two(min) + ":00"
                  }
                  else
                  {
                        t = two(min) + ":" + t
                  }
            }
      }
      
      if (hr > 0)
      {
            if (day < 1)
            {
                  t = hr + ":" + t
            }
            else
            {
                  t = two(hr) + ":" + t
            }
      }
      
      if (day > 0)
      {
            t = day + ":" + t
      }
      
      return t
}

function validateForm()
{
      var isValid = true;
      
      var i=0;
      
      while (i<tovalidate.length)
      {
            if (document.getElementById(tovalidate[i]).value === "")
            {
                  isValid = false;
            }
            
            i++;
      }
      
      document.getElementById("btnSubmit").disabled = !isValid;
}

// Called by the submit button to start the upload
function doSubmit(e)
{
      if(typeof swfCustom == 'function')
      {
            swfCustom();
      }

      date1 = new Date();
      milliseconds1 = date1.getTime();

      swfu.setButtonDisabled(true);

      var i=0;

      while (i<tovalidate.length)
      {
            document.getElementById(tovalidate[i]).readOnly = true;
            
            i++;
      }

      if (formChecker != null)
      {
            clearInterval(formChecker);
            formChecker = null;
      }
      
      e = e || window.event;
      
      if (e.stopPropagation)
      {
            e.stopPropagation();
      }
      
      e.cancelBubble = true;
      
      try
      {
            swfu.startUpload();
      }
      catch (ex)
      {

      }
      
      return false;
}

 // Called by the queue complete handler to submit the form
function uploadDone()
{
      try
      {
            document.getElementById("uploadForm").submit();
      }
      catch (ex)
      {
            alert("Error submitting form");
      }
}

function fileDialogStart()
{
      var txtFileName = document.getElementById("txtFileName");
      txtFileName.value = "";

      this.cancelUpload();
}

function fileQueueError(file, errorCode, message) 
{
      try
      {
            // Handle this error separately because we don't want to create a FileProgress element for it.
            switch (errorCode)
            {
                  case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
                    alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
                    return;
                  case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                    alert("The file you selected is too big.");
                    this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                    return;
                  case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                    alert("The file you selected is empty.  Please select another file.");
                    this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                    return;
                  case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                    alert("The file you choose is not an allowed file type.");
                    this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                    return;
                  default:
                    alert("An error occurred in the upload. Try again later.");
                    this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                    return;
            }
      }
      catch (e)
      {
      }
}

function fileQueued(file)
{
      try
      {
            var txtFileName = document.getElementById("txtFileName");
            txtFileName.value = file.name;
      }
      catch (e)
      {
      }
}

function fileDialogComplete(numFilesSelected, numFilesQueued)
{
      validateForm();
}

function uploadProgress(file, bytesLoaded, bytesTotal)
{
      try
      {
            var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
            
            var date2 = new Date();
            var milliseconds2 = date2.getTime();
            var difference = milliseconds2 - milliseconds1;
            
            var timeleft = Math.ceil((bytesTotal-bytesLoaded)/bytesLoaded*difference/1000)*1000;
            
            estimatedtime = converttime(timeleft);

            file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
            var progress = new FileProgress(file, this.customSettings.progress_target);
            progress.setProgress(percent);
            progress.setStatus("<div style=\"float: left;\">Uploading...</div><div style=\"float: right;\">"+estimatedtime+" remaining</div><div style=\"clear: both; line-height: 0; margin-bottom: 4px;\"></div>");
      }
      catch (e)
      {
      
      }
}

function uploadSuccess(file, serverData)
{
      try
      {
            file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
            var progress = new FileProgress(file, this.customSettings.progress_target);
            progress.setComplete();
            progress.setStatus("Complete.");
            progress.toggleCancel(false);
            
            if (serverData === " ")
            {
                  this.customSettings.upload_successful = false;
            }
            else
            {
                  this.customSettings.upload_successful = true;
                  document.getElementById("hidFileID").value = serverData;
            }
      }
      catch (e)
      {
      }
}

function uploadComplete(file)
{
      try
      {
            if (this.customSettings.upload_successful)
            {
                  this.setButtonDisabled(true);
                  uploadDone();
            }
            else
            {
                  file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
                  var progress = new FileProgress(file, this.customSettings.progress_target);
                  progress.setError();
                  progress.setStatus("File rejected");
                  progress.toggleCancel(false);
                  
                  var txtFileName = document.getElementById("txtFileName");
                  txtFileName.value = "";
                  validateForm();

                  alert("There was a problem with the upload.\nThe server did not accept it.");
                  
                  swfu.setButtonDisabled(false);
            }
      }
      catch (e)
      {
      }
}

function uploadError(file, errorCode, message)
{
      try
      {
              if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED)
              {
                // Don't show cancelled error boxes
                return;
              }
              
              var txtFileName = document.getElementById("txtFileName");
              txtFileName.value = "";
              validateForm();
              
              // Handle this error separately because we don't want to create a FileProgress element for it.
              switch (errorCode)
              {
                    case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
                      alert("There was a configuration error.  You will not be able to upload a resume at this time.");
                      this.debug("Error Code: No backend file, File name: " + file.name + ", Message: " + message);
                      return;
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                      alert("You may only upload 1 file.");
                      this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                      return;
                    case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                      break;
                    default:
                      alert("An error occurred in the upload. Try again later.");
                      this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                      return;
              }

              file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
              var progress = new FileProgress(file, this.customSettings.progress_target);
              progress.setError();
              progress.toggleCancel(false);

              switch (errorCode)
              {
                    case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
                      progress.setStatus("Upload Error");
                      this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
                      break;
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
                      progress.setStatus("Upload Failed.");
                      this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                      break;
                    case SWFUpload.UPLOAD_ERROR.IO_ERROR:
                      progress.setStatus("Server (IO) Error");
                      this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
                      break;
                    case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
                      progress.setStatus("Security Error");
                      this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
                      break;
                    case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                      progress.setStatus("Upload Cancelled");
                      this.debug("Error Code: Upload Cancelled, File name: " + file.name + ", Message: " + message);
                      break;
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                      progress.setStatus("Upload Stopped");
                      this.debug("Error Code: Upload Stopped, File name: " + file.name + ", Message: " + message);
                      break;
              }
      }
      catch (ex)
      {
      }
}
